home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / hity wydania / Ubuntu 9.10 PL / karmelkowy-koliberek-desktop-9.10-i386-PL.iso / casper / filesystem.squashfs / usr / lib / python2.6 / audiodev.pyc (.txt) < prev    next >
Python Compiled Bytecode  |  2009-11-11  |  8KB  |  303 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 2.6)
  3.  
  4. '''Classes for manipulating audio devices (currently only for Sun and SGI)'''
  5. from warnings import warnpy3k
  6. warnpy3k('the audiodev module has been removed in Python 3.0', stacklevel = 2)
  7. del warnpy3k
  8. __all__ = [
  9.     'error',
  10.     'AudioDev']
  11.  
  12. class error(Exception):
  13.     pass
  14.  
  15.  
  16. class Play_Audio_sgi:
  17.     classinited = 0
  18.     frameratelist = None
  19.     nchannelslist = None
  20.     sampwidthlist = None
  21.     
  22.     def initclass(self):
  23.         import AL as AL
  24.         self.frameratelist = [
  25.             (48000, AL.RATE_48000),
  26.             (44100, AL.RATE_44100),
  27.             (32000, AL.RATE_32000),
  28.             (22050, AL.RATE_22050),
  29.             (16000, AL.RATE_16000),
  30.             (11025, AL.RATE_11025),
  31.             (8000, AL.RATE_8000)]
  32.         self.nchannelslist = [
  33.             (1, AL.MONO),
  34.             (2, AL.STEREO),
  35.             (4, AL.QUADRO)]
  36.         self.sampwidthlist = [
  37.             (1, AL.SAMPLE_8),
  38.             (2, AL.SAMPLE_16),
  39.             (3, AL.SAMPLE_24)]
  40.         self.classinited = 1
  41.  
  42.     
  43.     def __init__(self):
  44.         import al as al
  45.         import AL
  46.         if not self.classinited:
  47.             self.initclass()
  48.         
  49.         self.oldparams = []
  50.         self.params = [
  51.             AL.OUTPUT_RATE,
  52.             0]
  53.         self.config = al.newconfig()
  54.         self.inited_outrate = 0
  55.         self.inited_width = 0
  56.         self.inited_nchannels = 0
  57.         self.converter = None
  58.         self.port = None
  59.  
  60.     
  61.     def __del__(self):
  62.         if self.port:
  63.             self.stop()
  64.         
  65.         if self.oldparams:
  66.             import al
  67.             import AL
  68.             al.setparams(AL.DEFAULT_DEVICE, self.oldparams)
  69.             self.oldparams = []
  70.         
  71.  
  72.     
  73.     def wait(self):
  74.         if not self.port:
  75.             return None
  76.         import time as time
  77.         while self.port.getfilled() > 0:
  78.             time.sleep(0.1)
  79.             continue
  80.             self.port
  81.         self.stop()
  82.  
  83.     
  84.     def stop(self):
  85.         if self.port:
  86.             self.port.closeport()
  87.             self.port = None
  88.         
  89.         if self.oldparams:
  90.             import al
  91.             import AL
  92.             al.setparams(AL.DEFAULT_DEVICE, self.oldparams)
  93.             self.oldparams = []
  94.         
  95.  
  96.     
  97.     def setoutrate(self, rate):
  98.         for raw, cooked in self.frameratelist:
  99.             if rate == raw:
  100.                 self.params[1] = cooked
  101.                 self.inited_outrate = 1
  102.                 break
  103.                 continue
  104.         else:
  105.             raise error, 'bad output rate'
  106.  
  107.     
  108.     def setsampwidth(self, width):
  109.         for raw, cooked in self.sampwidthlist:
  110.             if width == raw:
  111.                 self.config.setwidth(cooked)
  112.                 self.inited_width = 1
  113.                 break
  114.                 continue
  115.         elif width == 0:
  116.             import AL
  117.             self.inited_width = 0
  118.             self.config.setwidth(AL.SAMPLE_16)
  119.             self.converter = self.ulaw2lin
  120.         else:
  121.             raise error, 'bad sample width'
  122.  
  123.     
  124.     def setnchannels(self, nchannels):
  125.         for raw, cooked in self.nchannelslist:
  126.             if nchannels == raw:
  127.                 self.config.setchannels(cooked)
  128.                 self.inited_nchannels = 1
  129.                 break
  130.                 continue
  131.         else:
  132.             raise error, 'bad # of channels'
  133.  
  134.     
  135.     def writeframes(self, data):
  136.         if not self.inited_outrate and self.inited_nchannels:
  137.             raise error, 'params not specified'
  138.         self.inited_nchannels
  139.         if not self.port:
  140.             import al
  141.             import AL
  142.             self.port = al.openport('Python', 'w', self.config)
  143.             self.oldparams = self.params[:]
  144.             al.getparams(AL.DEFAULT_DEVICE, self.oldparams)
  145.             al.setparams(AL.DEFAULT_DEVICE, self.params)
  146.         
  147.         if self.converter:
  148.             data = self.converter(data)
  149.         
  150.         self.port.writesamps(data)
  151.  
  152.     
  153.     def getfilled(self):
  154.         if self.port:
  155.             return self.port.getfilled()
  156.         return 0
  157.  
  158.     
  159.     def getfillable(self):
  160.         if self.port:
  161.             return self.port.getfillable()
  162.         return self.config.getqueuesize()
  163.  
  164.     
  165.     def ulaw2lin(self, data):
  166.         import audioop as audioop
  167.         return audioop.ulaw2lin(data, 2)
  168.  
  169.  
  170.  
  171. class Play_Audio_sun:
  172.     
  173.     def __init__(self):
  174.         self.outrate = 0
  175.         self.sampwidth = 0
  176.         self.nchannels = 0
  177.         self.inited_outrate = 0
  178.         self.inited_width = 0
  179.         self.inited_nchannels = 0
  180.         self.converter = None
  181.         self.port = None
  182.  
  183.     
  184.     def __del__(self):
  185.         self.stop()
  186.  
  187.     
  188.     def setoutrate(self, rate):
  189.         self.outrate = rate
  190.         self.inited_outrate = 1
  191.  
  192.     
  193.     def setsampwidth(self, width):
  194.         self.sampwidth = width
  195.         self.inited_width = 1
  196.  
  197.     
  198.     def setnchannels(self, nchannels):
  199.         self.nchannels = nchannels
  200.         self.inited_nchannels = 1
  201.  
  202.     
  203.     def writeframes(self, data):
  204.         if not self.inited_outrate and self.inited_width and self.inited_nchannels:
  205.             raise error, 'params not specified'
  206.         self.inited_nchannels
  207.         if not self.port:
  208.             import sunaudiodev as sunaudiodev
  209.             import SUNAUDIODEV as SUNAUDIODEV
  210.             self.port = sunaudiodev.open('w')
  211.             info = self.port.getinfo()
  212.             info.o_sample_rate = self.outrate
  213.             info.o_channels = self.nchannels
  214.             if self.sampwidth == 0:
  215.                 info.o_precision = 8
  216.                 self.o_encoding = SUNAUDIODEV.ENCODING_ULAW
  217.             else:
  218.                 info.o_precision = 8 * self.sampwidth
  219.                 info.o_encoding = SUNAUDIODEV.ENCODING_LINEAR
  220.                 self.port.setinfo(info)
  221.         
  222.         if self.converter:
  223.             data = self.converter(data)
  224.         
  225.         self.port.write(data)
  226.  
  227.     
  228.     def wait(self):
  229.         if not self.port:
  230.             return None
  231.         self.port.drain()
  232.         self.stop()
  233.  
  234.     
  235.     def stop(self):
  236.         if self.port:
  237.             self.port.flush()
  238.             self.port.close()
  239.             self.port = None
  240.         
  241.  
  242.     
  243.     def getfilled(self):
  244.         if self.port:
  245.             return self.port.obufcount()
  246.         return 0
  247.  
  248.  
  249.  
  250. def AudioDev():
  251.     
  252.     try:
  253.         import al
  254.     except ImportError:
  255.         
  256.         try:
  257.             import sunaudiodev
  258.             return Play_Audio_sun()
  259.         except ImportError:
  260.             
  261.             try:
  262.                 import Audio_mac as Audio_mac
  263.             except ImportError:
  264.                 raise error, 'no audio device'
  265.  
  266.             return Audio_mac.Play_Audio_mac()
  267.         except:
  268.             None<EXCEPTION MATCH>ImportError
  269.         
  270.  
  271.         None<EXCEPTION MATCH>ImportError
  272.  
  273.     return Play_Audio_sgi()
  274.  
  275.  
  276. def test(fn = None):
  277.     import sys as sys
  278.     if sys.argv[1:]:
  279.         fn = sys.argv[1]
  280.     else:
  281.         fn = 'f:just samples:just.aif'
  282.     import aifc as aifc
  283.     af = aifc.open(fn, 'r')
  284.     print fn, af.getparams()
  285.     p = AudioDev()
  286.     p.setoutrate(af.getframerate())
  287.     p.setsampwidth(af.getsampwidth())
  288.     p.setnchannels(af.getnchannels())
  289.     BUFSIZ = af.getframerate() / af.getsampwidth() / af.getnchannels()
  290.     while None:
  291.         data = af.readframes(BUFSIZ)
  292.         if not data:
  293.             break
  294.         
  295.         print len(data)
  296.         continue
  297.         p.wait()
  298.         return None
  299.  
  300. if __name__ == '__main__':
  301.     test()
  302.  
  303.